package com.reactim.message.config.management;

/**
 * 配置文件格式枚举
 *
 * <p>定义支持的配置文件格式类型，用于配置的导出和导入操作。</p>
 *
 * @author ReactIM Team
 * @version 1.0.0
 * @since 1.0.0
 */
public enum ConfigurationFormat {

    /**
     * YAML格式
     * 可读性好，支持注释，Spring Boot默认格式
     */
    YAML("yaml", "application/x-yaml", ".yml"),

    /**
     * JSON格式
     * 结构化数据，易于程序处理，广泛支持
     */
    JSON("json", "application/json", ".json");

    private final String name;
    private final String mimeType;
    private final String extension;

    ConfigurationFormat(String name, String mimeType, String extension) {
        this.name = name;
        this.mimeType = mimeType;
        this.extension = extension;
    }

    /**
     * 获取格式名称
     *
     * @return 格式名称
     */
    public String getName() {
        return name;
    }

    /**
     * 获取MIME类型
     *
     * @return MIME类型
     */
    public String getMimeType() {
        return mimeType;
    }

    /**
     * 获取文件扩展名
     *
     * @return 文件扩展名
     */
    public String getExtension() {
        return extension;
    }

    /**
     * 根据文件扩展名检测格式
     *
     * @param fileName 文件名
     * @return 配置格式，如果无法识别则返回YAML
     */
    public static ConfigurationFormat fromFileName(String fileName) {
        if (fileName == null) {
            return YAML;
        }

        String lowerName = fileName.toLowerCase();
        if (lowerName.endsWith(".json")) {
            return JSON;
        } else if (lowerName.endsWith(".yml") || lowerName.endsWith(".yaml")) {
            return YAML;
        } else {
            return YAML; // 默认格式
        }
    }
}
